package com.itbaizhan.filter;

import javax.servlet.*;
import java.io.IOException;
/*FilterChain（过滤器链）
Filter技术的特点是在对请求或响应做预处理时，可实现“插拔式”的程序设计。
我们可以根据自己需求添加多个Filter，也可以根据需求去掉某个Filter，
通过修改web.xml文件即可实现。那么如果有多个过滤器对某个请求及响应进行过滤，那么这组过滤器就称为过滤器链。

Filter执行顺序
则按照在web.xml文件中配置的上下顺序来决定先后。在上的先执行，
 在下的后执行。*/
/*第一个Filter案例
* 在web.xml进行配置参数*/

//实现的是javax.servlet.*
public class FirstFilter implements Filter {

    //当filter对象实例化后，会立即调用的一个方法（init()）
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("INit.......");
    }

    //过虑请求与响应，当客户端浏览器请求的URL与Filter所定URL-pattern所匹配，那么该请求会进入到该方法进行过虑
    //ServletRequest 与 ServletResponse 是协议的祖对象，可以使所有协议继承使用
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
       //对请求进行处理
        System.out.println("请求被过虑");
        //对请求做放行处理
        //在filterChain.doFilter()之前是对请求进行处理，
        // 在filterChain.doFilter()之后是响应进行处理
        filterChain.doFilter(servletRequest,servletResponse);

        //对响应进行处理
        System.out.println("响应被过虑");
    }

    /*当filter对象在销毁之前会调用一次该方法*/
    @Override
    public void destroy() {

    }
}
/*Filter过滤器
过滤器作用
Filter过滤器是Servlet2.3中所提供的一个过滤请求与响应的对象。

Filter过滤器既可以对客户端向服务器端发送的请求进行过滤，
也可以对服务器端向客户端产生的响应进行过滤处理。*/

/*Filter对象的创建
创建一个Class实现Filter接口，并实现接口中三个抽象方法。

init()方法：初始化方法，在创建Filter后立即调用。可用于完成初始化动作。

doFilter()方法：拦截请求与响应方法，可用于对请求和响应实现预处理。

destroy()方法：销毁方法，在销毁Filter之前自动调用。
可用于完成资源释放等动作。

实时效果反馈

1.如下对Filter过滤器说法正确的是。

A Filter需要继承Filter类

B Filter只能过滤请求

C Filter只能过滤响应

D Filter既可以过滤请求也可以过滤响应

答案

1=>D*/